package com.iman.task;

import java.util.Map;
import java.util.Map.Entry;

import javax.annotation.PostConstruct;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.iman.Confucius.domain.User;
import com.iman.Confucius.dto.RemarkStudyTimeDto;
import com.iman.Confucius.mappers.models.DrmCourse;
import com.iman.Confucius.mappers.models.DrmCourseCategory;
import com.iman.Confucius.mappers.models.DrmStudyRemark;
import com.iman.Confucius.service.UserService;
import com.iman.Confucius.service.student.CourseService;
import com.iman.common.util.IdCreater;
import com.iman.common.util.JsonMapper;

/**
 * *************************************************************************
 * 
 * @文件名称: CultureMedium.java
 * 
 * @包路径 : com.zhe800.product.spring.task.checkstock
 * 
 * @版权所有: 团博百众（北京）科技有限公司 (C) 2014
 * 
 * @类描述:
 * 
 * @创建人: wangxiaolei
 * 
 * @创建时间: 2014年5月13日 - 下午8:19:06
 * 
 * @修改记录: 
 *        ------------------------------------------------------------------------
 *        ----------------------- 时间 | 修改人 | 修改的方法 | 修改描述
 *        ------------------------
 *        ------------------------------------------------
 *        ----------------------- | | |
 *        ------------------------------------------
 *        -----------------------------------------------------
 * 
 ************************************************************************** 
 */

@Component("RemarkStudenStudyTimeTask")
public class RemarkStudenStudyTimeTask {
	private Logger logger = LoggerFactory
			.getLogger(RemarkStudenStudyTimeTask.class);

	public RemarkStudenStudyTimeTask() {
		// TODO Auto-generated constructor stub
	}

 
	@Autowired
	private CourseService courseService;

	
	 
	@Autowired
	private	UserService	userService;
	
	
	@PostConstruct
	public void start() {
		// TODO 启动执行
	}

	/**
	 * 
	 * Function: 功能说明： 使用说明：
	 * 
	 * @author wangxiaolei DateTime 2015年5月6日 下午11:04:32 返回类型: void
	 */
 
	public void remarkStudyTiem() {

		logger.info("开始统计 学习时常..................");

		Map<String, String> remarks = this.courseService 	.getRemarkStudentStudyTime();

		
		if(remarks==null ||remarks.isEmpty()){
			logger.info("不存在内容..................");
			return;
		}
		
		
		for(Entry<String, String> entity:remarks.entrySet()){
			
			logger.info("开始处理>>>>"+entity.getKey()  +" , "+entity.getValue());
			
			RemarkStudyTimeDto dto = JsonMapper.toObject(entity.getValue(), RemarkStudyTimeDto.class);
			
			logger.info("开始处理--->解析后的内容::"+dto);
			
			//TODO  对比 ，添加纪录  ，   发布动态内容。。。。
			
			DrmStudyRemark remarkold  = this.courseService.getStudentStudymark(dto);

			//这个读取  学习记录表  更新进度，
			if(remarkold!=null&&  remarkold.getStudyTime()*60 < dto.getSeconds()){
				//观看的时间大于 ，原始记录的时间，可以更新
				DrmStudyRemark remarknew  = new DrmStudyRemark();
				DrmCourseCategory category =null;
				try{
					BeanUtils.copyProperties(remarknew, remarkold);
					int time =(int) ( dto.getSeconds()/60)  ;if(time<=0){return;}
					//学习多少分钟
					remarknew.setStudyTime(time);
					
					//从新算出进度    TODO  
					
					 category = this.courseService.getCourseCategoryById(dto.getCtgId());
					
					Integer allTimes = category.getCategoryTimes();
					
					//根据学习的时间 ，计算学习的进度
					if(allTimes!=null){
						int progress = (int) ((dto.getSeconds()*100)/60/allTimes);
						remarknew.setProgress(progress);
					}
					
				}catch(Exception t){
					t.printStackTrace();
				}
				
				User  user = userService.getUser(dto.getUserId());
				
				//DrmCourseCategory dcc = this.courseService.getCourseCategoryById(dto.getCtgId());
				DrmCourse course = this.courseService.getCouserById(NumberUtils.toLong( dto.getCourseId() ));
				
				this.courseService.updateDrmStudyRemark(remarkold, remarknew, course.getCourseNm(), category.getCategoryName(), user.getUserName());
				
				
				
				this. updateRemark(	  dto ,     remarkold,   remarknew);
			} else{
				//如果没有 的情况，直接添加一条
				//支付那里一定保证要存在，如果失败需要检查 ，支付通知后，  保存课程的记录哪里，不是在这里进行处理
				logger.error("支付那里一定保证要存在，如果失败需要检查 ，支付通知后，  保存课程的记录哪里，不是在这里进行处理 :>>>> " + entity.getValue());
			}
			
		}
		
		logger.info("开始-结束统计 学习时常..................");
	}
	
	
	/**
	 * 
	 *  Function:
	 *  功能说明：更新记录
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月10日 下午6:47:42
	 *	返回类型: void    
	 *  @param dto
	 *  @param remarkold
	 *  @param remarknew
	 */
	private  void updateRemark(	RemarkStudyTimeDto dto ,DrmStudyRemark    remarkold, DrmStudyRemark remarknew){
		//观看的时间大于 ，原始记录的时间，可以更新
		 
		User  user = userService.getUser(dto.getUserId());
		
		DrmCourseCategory dcc = this.courseService.getCourseCategoryById(dto.getCtgId());
		
		DrmCourse course = this.courseService.getCouserById(NumberUtils.toLong( dto.getCourseId() ));
		
		boolean result = this.courseService.updateDrmStudyRemark(     remarkold,   remarknew, course.getCourseNm(), dcc.getCategoryName(), user.getUserName());
		
		logger.info("updateDrmStudyRemark  result = :  "+ result);
	}

}
